服务端关键源码 网页端
1 2 3 4 5 6 7 8 9 $.get("http://127.0.0.1:8000/blog/img/",function(data,status){ /**,{ZT_arr : '1'}**/ {# alert("链接完成···");#} {#alert("Data: " + data + "\nStatus: " + status);#} {#alert($(data).find("img#img1")[0].src);#} $('#p1').html($(data).find("p#p1").Text); $('#p2').html($(data).find("p#p2").Text); $("#img1").attr('src',$(data).find("img#img1")[0].src); }
后台端
1 2 3 4 5 6 7 8 9 10 11 12 def img(request): serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostname() port = 9999 serversocket.bind((host, port)) serversocket.listen(5) arr, arr2 = serversocket.accept() arrs = arr.recv(999999) arr.close() imgStr = arrs.decode('utf-8') imgStr = 'data:image/jpeg;base64,'+imgStr return render(request,'blog/echo_img.html',{'arr1':arr2[0],'arr2':arr2[1],'imgStr':imgStr})
客户端关键源码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import socket import sys import demjson import re import base64 from io import BytesIO import time from PIL import Image,ImageGrab,ImageTk def lianjie(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostname() port = 9999 s.connect((host, port)) return s def hqpm(): im = ImageGrab.grab() jpeg_image_buffer = BytesIO() im.save(jpeg_image_buffer, format="JPEG") imgStr = base64.b64encode(jpeg_image_buffer.getvalue()) print(imgStr) return imgStr if __name__ == '__main__': while True: s = lianjie() imgStr = hqpm() s.send(imgStr) time.sleep(0.2) s.close()
效果图
这就是这个视频流的全部关键代码了,我说下简单的原理,就是利用客服端在电脑上死循环截屏然后发送到服务端,服务端 用一个Ajax来死循环刷新网页的部分内容,这部分内容就是后台Django接收的客服端的图片信息,这样就能在网页上简单的显 示一个无限刷新的图片(约等于视频),但是有个缺点还没有改正,这个网页刷新的时间间隔只能是200毫秒,再短一点就会出 现端口冲突,但这200毫秒不能缩短是致命的,在我们人眼里看起来就和PPT快差不多了,这个问题要等到后面植入其他东西来 优化,或者直接换一种方法也行。